package com.yft.data.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class URLRewriter {

	// *? - 懒惰匹配，* - 贪婪匹配。
	/** image src 正则式前半部分。 */
	private static String REGEX_SRC_START = "(<[Ii][Mm][Gg][\\s\\S]*?[Ss][Rr][Cc][\\s\\S]*?=[ \"]*?)(";
	/** image src 正则式后半部分。 */
	private static String REGEX_SRC_END = "[^ \"]+?)([ \">]+?)";
	/** anchor href 正则式前半部分。 */
	private static String REGEX_HREF_START = "(<[Aa][\\s\\S]*?[Hh][Rr][Ee][Ff][\\s\\S]*?=[ \"]*?)(";
	/** anchor href 正则式后半部分。 */
	private static String REGEX_HREF_END = "[^ \"]+?)([ \">]+?)";

	public static int TYPE_IMAGE = 1;
	public static int TYPE_ANCHOR = 2;

	private String html;

	public URLRewriter(String html) {
		this.html = html;
	}

	public String rewrite(int type, String srcPrefix, String srcPrefixNew) {
		if (html == null) {
			return null;
		}
		// 相对地址为当前，不需要重写。
		if(srcPrefix==null){
			return html;
		}
		// 正则式。
		String regex;
		if (type == TYPE_IMAGE) {
			regex = REGEX_SRC_START + regexFilter(srcPrefix) + REGEX_SRC_END;
		} else {
			regex = REGEX_HREF_START + regexFilter(srcPrefix) + REGEX_HREF_END;
		}
		// 设置规则。
		Pattern patternSrc = Pattern.compile(regex);
		// 用规则匹配文本。
		Matcher matcherSrc = patternSrc.matcher(html);
		//
		StringBuffer tempBuffer = new StringBuffer();
		int start = 0;
		int end = 0;
		while (matcherSrc.find()) {
			start = matcherSrc.start(2);
			// 把上次 end 到这次 start 之间的数据填充到 buffer。
			// 如果是第一次循环，则是把起始(因为 end 初始为0)到这次 start 之间的数据填充到 buffer。
			tempBuffer.append(html.substring(end, start));
			end = matcherSrc.end(2);
			// 替换 srcPrefix。
			tempBuffer.append(srcPrefixNew
					+ matcherSrc.group(2).substring(srcPrefix.length()));
		}
		tempBuffer.append(html.substring(end, html.length()));
		//
		html = tempBuffer.toString();
		return html;
	}

	private String regexFilter(String string) {
		return string.replace(".", "\\.");
	}

	public String getHtml() {
		return html;
	}
}
